Python jieba分词(使用默认词典,自定义词典,对文件内容分词并统计词频)

您所在的位置:网站首页 python 标注词性 Python jieba分词(使用默认词典,自定义词典,对文件内容分词并统计词频)

Python jieba分词(使用默认词典,自定义词典,对文件内容分词并统计词频)

2023-08-18 07:00| 来源: 网络整理| 查看: 265

本文仅作为本人的笔记分享,便于以后查找,也可以提供一些学习笔记给同学们,如有错误,欢迎批评指正

一.jieba分词的三种模式

1.全模式:将可以成词的词语都扫描出来,但是不解决歧义 2.精确模式:将所有句子精确地分开 3.搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 import jieba ''' jieba分词的三种模式: 1.全模式:将可以成词的词语都扫描出来,但是不解决歧义 2.精确模式:将所有句子精确地分开 3.搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 ''' #使用默认词典进行分词 seg=jieba.cut("李小福是创新办主任也是云计算方面的专家",cut_all=True)#全模式 print("/".join(seg)) seg=jieba.cut("李小福是创新办主任也是云计算方面的专家")#默认精确模式 也可以设置cut_all=False print("/".join(seg)) seg=jieba.cut_for_search("李小福是创新办主任也是云计算方面的专家")#搜索引擎模式 print("/".join(seg))

(我在运行时遇到这种错误,不应该把Python文件命名为jieba.py,换个别的名字就好了) 在这里插入图片描述 上述代码使用的是 jieba中自定义的词典,我们也可以使用自己定义的词典。

二.自定义词典

使用jieba.load_userdict(“filepath”)方法获取自定义词典 我自定义两个词典 词典1:创新办 1000 云计算 20000 词典2:新办 100000 在这里插入图片描述 (后面的n是词性,有没有都可以) 使用自定义词典代码及结果如下:

jieba.load_userdict(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\cidian1.txt") seg=jieba.cut("李小福是创新办主任也是云计算方面的专家") print("/".join(seg)) jieba.load_userdict(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\cidian2.txt") seg=jieba.cut("李小福是创新办主任也是云计算方面的专家") print("/".join(seg))

在这里插入图片描述 我们观察结果发现词典不一样但结果是一样的,这是因为我们最开始使用的是jieba1,它默认后面的分词都使用这个词典,如果想要使用词典2,使用Jupyter NoteBook写代码的只需要点击重启按钮即可(如下图),使用PyCharm的直接把前面的代码注释,留着用词典2的代码就可以了。

在这里插入图片描述 结果如下

在这里插入图片描述

注意:在自定义词典的文件中,词语与频数之间只能有一个空格,而且文件要保存为UTF-8编码格式,输入文件路径时要 在 \前面加上 \转义或者在路径前面加 r(我写的时候出现的就是上面三种错误);并且我们自定义的词典也只是将词语添加到jieba自带的词典当中,所以词语的频数如果比jieba默认词典的频数少,不起作用(例如:我将词典2中的“新办”的频数改为10,则分词时“新办”不会在一起,而是按照默认词典分为“创新/办“”)

三.对文件内容分词并统计词频 事先要创建三个文本文件,一个存放要分词的内容的文件,一个存放分词之后的结果的文件,另一个存放词语和词频 在这里插入图片描述

1.创建停用词 我使用的是哈工大停用词表 (下载地址:https://github.com/goto456/stopwords 下载之后里面的hit_stopwords.txt就是了) 在这里插入图片描述

def stopwordslist(filepath): stopwords=[line.strip() for line in open(filepath,'r',encoding='utf-8').readlines()] # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。 #readlines()读取所有行并返回列表 return stopwords

2.对句子进行分词

#对句子进行分词 def seg_sentence(sentence): sentence_seged=jieba.cut(sentence.strip()) stopwords=stopwordslist(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\哈工大停用词表.txt")#这里加载停用词的路径 outstr="" for word in sentence_seged: if word not in stopwords: if word!='\t': outstr+=word outstr+=" " return outstr

3.读取文件内容,分词后写入文件中

inputs=open(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\wenjian.txt",'r',encoding='utf-8')#加载要处理的文件的路径 outputs=open(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\output.txt",'w',encoding='utf-8')#加载处理后的文件路径 for line in inputs: line_seg=seg_sentence(line)#这里的返回值是字符串 outputs.write(line_seg) outputs.close() inputs.close()

4.统计词频

with open(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\output.txt", 'r',encoding='utf-8') as fr: #读入已经去除停用词的文件 data = jieba.cut(fr.read()) data = dict(Counter(data))#dict()用于创建一个字典 counter()作用就是在一个数组内,遍历所有元素,将元素出现的次数记下来 with open(r"C:\Users\de'l'l\Desktop\学习\信息检索与原理\cipin.txt", 'w',encoding='utf-8') as fw: #读入存储wordcount的文件路径 for k, v in data.items(): fw.write('%s,%d\n' % (k, v))

5.结果

在这里插入图片描述

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3